import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueJsx from '@vitejs/plugin-vue-jsx'
import vueDevTools from 'vite-plugin-vue-devtools'
import Components from 'unplugin-vue-components/vite' // 引入 unplugin-vue-components
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import AutoImport from 'unplugin-auto-import/vite' // 引入 unplugin-auto-import
import dts from 'vite-plugin-dts' // 引入 vite-plugin-dts
import { createSvgIconsPlugin } from 'vite-plugin-svg-icons'
import path from 'path'
// fileURLToPath 已由 Vite 自动注入，无需额外导入

// https://vite.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    vueJsx(),
    vueDevTools(),
    // 自动导入组件
    Components({
      // 配置需要自动导入的组件目录
      dirs: ['src/components'],
      // 配置需要自动导入的组件目录
      resolvers: [ElementPlusResolver()], // 支持Element Plus
      // 组件的有效扩展名
      extensions: ['vue'],
      // 配置文件生成位置
      dts: 'src/components.d.ts',
    }),
    // 自动导入API
    AutoImport({
      // 自动导入的库
      imports: ['vue', 'vue-router', 'pinia'],
      // 自动导入Element Plus相关函数
      resolvers: [ElementPlusResolver()],
      // 生成类型声明文件的位置
      dts: 'src/auto-imports.d.ts',
    }),
    // 生成TypeScript声明文件
    dts({
      // 指定需要生成声明文件的目录
      include: ['src/**/*.ts', 'src/**/*.vue'],
      // 输出声明文件的目录
      outDir: 'dist/types',
      // 禁用rollupTypes以避免路径问题
      rollupTypes: false,
      // 跳过env.d.ts文件
      exclude: ['env.d.ts']
    }),
    // 配置SVG图标插件
    createSvgIconsPlugin({
      // 指定SVG图标的存放目录
      iconDirs: [path.resolve(process.cwd(), 'src/assets/icon')],
      // 指定symbolId格式
      symbolId: 'icon-[dir]-[name]'
    })
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url)),
    },
  },
})
